package br.com.pentagrama.util;

import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class ParseUtil {

	private static String[] unidade = new String[]{"bps","Kbps","Mbps","Gbps","Tbps","Pbps"};
	
	public static long getMiliSegundos(String valor) {
		List<Long> longs = new ArrayList<Long>();
		Pattern padrao = Pattern.compile("[1234567890]{1,3}[\\s]{0,9}ms");
		//"time: 145ms 28ms 167ms 0ms 10 ms 22  ms	"
		Matcher pesquisa = padrao.matcher(valor);
		
		boolean b = false;
		while(b = pesquisa.find()) {
			if(b) {
				String group = pesquisa.group();
				group = group.replace("ms", "");
				longs.add(Long.parseLong(group.trim()));
			} else {
				System.out.println("Não encontrado");
			}
		}
		
		if(longs.size() > 0) {
			return longs.get(0);
		} else {
			throw new RuntimeException("Idioma do SO não suportado.");
		}
	}
	
	public static String getVelocidadeFormatada(double valor) {
		String unidade =  "Kbps";
		if(valor > 1024) {
			valor = valor / 1024.0;
			unidade = "Mbps";
		}
		
		if (valor > 1024) {
			valor = valor / 1024.0;
			unidade = "Gbps";
		}
		
		DecimalFormat df = new DecimalFormat("#,###.00");  
		String formatado = df.format(valor);
		return formatado + " " + unidade;
	}
	
	public static String getIP(String ipPorta) {
		int indice = ipPorta.indexOf(":");
		if(indice < 0) {
			return null;
		}
		return ipPorta.substring(0, indice);
	}
	
	public static int getPorta(String ipPorta) {
		int indice = ipPorta.indexOf(":");
		if(indice < 0) {
			return 0;
		}
		return Integer.parseInt(ipPorta.substring(indice+1));
	}
	
	public static String formatarVelocidade(Double speed) {
		if(speed == null) {
			return "-";
		}
		
		int tipo = 0;
		while(speed >= 1024) {
			speed = speed / 1024;
			tipo++;
		}
		
		return NumberUtil.formatDecimal(speed) + " " + unidade[tipo];
	}

}
